package com.waitingresult.thread.desc;

public class ThreadDesc {
    /**
     * 多线程的实现方式
     * 1. 继承Thread类,重写Run方法,调用Start 启动
     *      如果我们自己调用Run方法, 程序还是在主线程内执行, 所以需要调用Start 方法, 让JVM调用这个类的Run方法,重新开启一个线程
     * 2. 实现Runable接口,重写Run方法,  new Thread 对象  把 Runable的实现类 作为入参
     *
     * 线程调度模型
     *    Java有2种多线程的调度模型
     *  1. 分时调度: 所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
     *      默认的优先级 是 5   设置优先级的范围是 1-10  只是抢占的几率会高
     *  2. 抢占调度: 优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取CPU的执行时间相对高一些.
     *
     *  线程控制
     *  1. sllpe(), 让当前线程, 睡眠 时间为毫秒, 睡眠时间到了之后 自动执行
     *  2. join(), 当前线程执行完毕之后, 在去执行其他线程
     *  3. setDaemon(boolean) 设置为守护线程, 当JVM中只剩下守护线程时,将停止JVM运行
     *
     *  线程的生命周期
     *      创建线程  (调用Start)->
     *      线程准备就绪 (有执行资格,没有执行权)->
     *      抢占CPU执行时间片(抢占成功则执行,失败则等待继续抢占) ->
     *      运行(调用Run方法,如果Run方法执行完毕,或者过程中出现异常,在或者调用Stop方法停止线程) ->
     *      死亡线程 ->
     *      垃圾回收
     *
     *  哪些类是线程安全的 都是方法同步的 即 加上了 同步锁
     *   StringBuffer
     *   Vector
     *   HashTable
     *   一般 Vector 和HashTable 在多线程环境下 也不会使用到
     *   我们有更好的解决方案, 通过Conllections.synchronizedList方法 可以将一个 非线程安全的 集合转换成线程安全的集合
     *
     *
     */
    public static void main(String[] args) {
        // 如果我们自己调用Run方法, 程序还是在主线程内执行, 所以需要调用Start 方法, 让JVM调用这个类的Run方法,重新开启一个线程
       /* for (int i = 0; i < 1101; i++) {
            new ThreadDemo().start();
        }*/
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
            }
        }).start();
        new Thread(()->{
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
            }
        }).start();
    }

}
class ThreadDemo extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"-----------"+i);
        }
    }
}
class ThreadRunableDemo implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("-----------"+i);
        }
    }
}